package gbench.common.matlib.rdd;

import java.util.Map;
import java.util.function.Function;

/**
 * 属性集合的一般类
 * 
 * @author gbench
 *
 */
public interface IAttrs {

    /**
     * 获取属性集合
     * 
     * @return 属性集合
     */
    public Map<Object, Object> getAttributes();
    
    /**
     * 属性
     * @param <U> 元素类型
     * @param mapper 数据映射 map -> U
     */
    public default <U> U attrs(final Function<Map<? extends Object, ? extends Object>, U> mapper) {
        return mapper.apply(this.getAttributes());
    }

    /**
     * 获取属性集合 同名属性会被覆盖
     * 
     * @param name  属性名称
     * @param value 属性值
     */
    public default void addAttr(final Object name, final Object value) {
        this.getAttributes().put(name, value);
    }

    /**
     * 获取属性值
     * 
     * @param name 属性名称
     * @return
     */
    public default Object getAttr(final Object name) {
        return this.getAttributes().get(name);
    }
}
